﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using App.Modelo.Interfaces;
using App.Persistencia;
using App.SolInf.Controlador;
using App.SolInf.Modelo;
using App.SolInf.Vista.Listado;

namespace App.SolInf.Vista.Controls
{
    public partial class BuscarEmpresa : UserControl, INotifyPropertyChanged
    {
        public bool ReadOnly
        {
            get { return textBox1.ReadOnly;}
            set { textBox1.ReadOnly = value; }
        }

        private IOrderedEnumerable<Empresa> _empresas;
        
        public IEnumerable<Empresa> Empresas
        {
            get { return _empresas; }
            set
            {
                _empresas = null;

                if (value == null) return;

                _empresas = value.OrderBy(em => em.RazonSocial);

                var cli = new AutoCompleteStringCollection();

                cli.AddRange(_empresas.Select(c => c.RazonSocial).ToArray());

                textBox1.AutoCompleteCustomSource = cli;
            }
        }

        public BuscarEmpresa()
        {
            InitializeComponent();

        }

        private Empresa _empresa;

        [Bindable(true)]
        public Empresa Empresa
        {
            get { return _empresa; }

            set
            {
                _empresa = value;
                if (_empresa == null)
                {
                    tTel1.Text =
                        tEmail.Text =
                        tCP.Text =
                        tProvincia.Text =
                        tLocalidad.Text =
                        tDomicilio.Text =
                        tTipoDoc.Text =
                        tLocalidad.Text = "";
                }
                else
                {
                    textBox1.Text = _empresa.RazonSocial;

                    if (_empresa.Documento != null)
                    {
                        tTipoDoc.Text = _empresa.Documento.Tipo;
                        tNroDoc.Text = _empresa.Documento.Numero;
                    }

                    tDomicilio.Text = _empresa.Domicilio.Calle;

                    var ubi = _empresa.Domicilio.Localidad;

                    if (ubi != null)
                    {
                        tLocalidad.Text = ubi.Localidad;
                        tProvincia.Text = ubi.Provincia;
                        tCP.Text = ubi.CodPostal;
                    }

                    tTel1.Text = _empresa.Telefono1;
                    tEmail.Text = _empresa.Email;
                }

            }
        }

        private void textBox1_Enter(object sender, EventArgs e)
        {

        }

        private void textBox1_Leave(object sender, EventArgs e)
        {
            if (! ReadOnly)
            {
                if (_empresas != null) 
                    Empresa = _empresas.FirstOrDefault( em => em.RazonSocial == textBox1.Text);
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("Empresa"));
            }
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (null != ParentForm)
                {
                    ParentForm.SelectNextControl(this, true, true, true, true);
                }
            }

        }


        public event PropertyChangedEventHandler PropertyChanged;

       
    }
}
